Package com.bric.swing

Source Code of com.bric.swing.ColorPickerDemo

/*
* @(#)ColorPickerDemo.java
*
* $Date: 2011-05-02 16:01:45 -0500 (Mon, 02 May 2011) $
*
* Copyright (c) 2011 by Jeremy Wood.
* All rights reserved.
*
* The copyright of this software is owned by Jeremy Wood.
* You may not use, copy or modify this software, except in 
* accordance with the license agreement you entered into with 
* Jeremy Wood. For details see accompanying license terms.
*
* This software is probably, but not necessarily, discussed here:
* http://javagraphics.java.net/
*
* That site should also contain the most recent official version
* of this software.  (See the SVN repository for more details.)
*/
package com.bric.swing;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Random;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JWindow;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/** A simple demo for the ColorPicker class.
*
* @name ColorPicker
* @title Colors: a Color Dialog
* @release April 2007
* @blurb This is a Photoshop-style color choosing dialog.
* <p>You can pull some parts of it apart for customization, but out-of-the-box it offers a great interface if you're dealing with a power user.
* <p>Of course: all dialogs are at least slightly evil, and they should be used with care...
* @see <a href="http://javagraphics.blogspot.com/2007/04/jcolorchooser-making-alternative.html">Colors: a Color Dialog</code>
*/
public class ColorPickerDemo extends JApplet implements PropertyChangeListener {
  private static final long serialVersionUID = 1L;

  public static BufferedImage createBlurbGraphic(Dimension preferredSize) throws Exception {
    ColorPicker picker = new ColorPicker();
    picker.setColor(new Color(0x4F63C3));
    JFrame frame = new JFrame();
    final JInternalFrame window = new JInternalFrame();
    window.getContentPane().add(picker);
    window.pack();
    frame.getContentPane().add(window);
    frame.pack();
   
    final BufferedImage image = new BufferedImage(window.getWidth(), window.getHeight(), BufferedImage.TYPE_INT_ARGB);

    SwingUtilities.invokeAndWait(new Runnable() {
      public void run() {
        Graphics2D g = image.createGraphics();
        window.paint(g);
        g.dispose();
      }
    });
   
    return image;
  }
 
  /** This demonstrates how to customize a small <code>ColorPicker</code> component.
   */
  public static void main(String[] args) {
   
    final JFrame demo = new JFrame("Demo");
    final JWindow palette = new JWindow(demo);
    final ColorPicker picker = new ColorPicker(true,false);
   
    final JComboBox comboBox = new JComboBox();
    final JCheckBox alphaCheckbox = new JCheckBox("Include Alpha");
    final JCheckBox hsbCheckbox = new JCheckBox("Include HSB Values");
    final JCheckBox rgbCheckbox = new JCheckBox("Include RGB Values");
    final JCheckBox modeCheckbox = new JCheckBox("Include Mode Controls",true);
    final JButton button = new JButton("Show Dialog");
   
    demo.getContentPane().setLayout(new GridBagLayout());
    palette.getContentPane().setLayout(new GridBagLayout());
   
    GridBagConstraints c = new GridBagConstraints();
    c.gridx = 0; c.gridy = 0; c.weightx = 1; c.weighty = 0;
    c.insets = new Insets(5,5,5,5); c.anchor = GridBagConstraints.WEST;
    palette.getContentPane().add(comboBox,c);
    c.gridy++;
    palette.getContentPane().add(alphaCheckbox,c);
    c.gridy++;
    palette.getContentPane().add(hsbCheckbox,c);
    c.gridy++;
    palette.getContentPane().add(rgbCheckbox,c);
    c.gridy++;
    palette.getContentPane().add(modeCheckbox,c);
   
    c.gridy = 0;
    c.weighty = 1; c.fill = GridBagConstraints.BOTH;
    picker.setPreferredSize(new Dimension(220,200));
    demo.getContentPane().add(picker,c);
    c.gridy++; c.weighty = 0;
    demo.getContentPane().add(picker.getExpertControls(),c);
    c.gridy++; c.fill = GridBagConstraints.NONE;
    demo.getContentPane().add(button,c);
   
    comboBox.addItem("Hue");
    comboBox.addItem("Saturation");
    comboBox.addItem("Brightness");
    comboBox.addItem("Red");
    comboBox.addItem("Green");
    comboBox.addItem("Blue");
   
    ActionListener checkboxListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        if(src==alphaCheckbox) {
          picker.setOpacityVisible(alphaCheckbox.isSelected());
        } else if(src==hsbCheckbox) {
          picker.setHSBControlsVisible(hsbCheckbox.isSelected());
        } else if(src==rgbCheckbox) {
          picker.setRGBControlsVisible(rgbCheckbox.isSelected());
        } else if(src==modeCheckbox) {
          picker.setModeControlsVisible(modeCheckbox.isSelected());
        }
        demo.pack();
      }
    };
    picker.setOpacityVisible(false);
    picker.setHSBControlsVisible(false);
    picker.setRGBControlsVisible(false);
    picker.setHexControlsVisible(false);
    picker.setPreviewSwatchVisible(false);
   
    picker.addPropertyChangeListener(ColorPicker.MODE_PROPERTY, new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent evt) {
        int m = picker.getMode();
        if(m==ColorPicker.HUE) {
          comboBox.setSelectedIndex(0);
        } else if(m==ColorPicker.SAT) {
          comboBox.setSelectedIndex(1);
        } else if(m==ColorPicker.BRI) {
          comboBox.setSelectedIndex(2);
        } else if(m==ColorPicker.RED) {
          comboBox.setSelectedIndex(3);
        } else if(m==ColorPicker.GREEN) {
          comboBox.setSelectedIndex(4);
        } else if(m==ColorPicker.BLUE) {
          comboBox.setSelectedIndex(5);
        }
      }
    });
   
    alphaCheckbox.addActionListener(checkboxListener);
    hsbCheckbox.addActionListener(checkboxListener);
    rgbCheckbox.addActionListener(checkboxListener);
    modeCheckbox.addActionListener(checkboxListener);
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Color color = picker.getColor();
        color = ColorPicker.showDialog(demo, color, true);
        if(color!=null)
          picker.setColor(color);
      }
    });

    comboBox.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int i = ((JComboBox)e.getSource()).getSelectedIndex();
        if(i==0) {
          picker.setMode(ColorPicker.HUE);
        } else if(i==1) {
          picker.setMode(ColorPicker.SAT);
        } else if(i==2) {
          picker.setMode(ColorPicker.BRI);
        } else if(i==3) {
          picker.setMode(ColorPicker.RED);
        } else if(i==4) {
          picker.setMode(ColorPicker.GREEN);
        } else if(i==5) {
          picker.setMode(ColorPicker.BLUE);
        }
      }
    });
    comboBox.setSelectedIndex(2);

    palette.pack();
    palette.setLocationRelativeTo(null);
   
    demo.addComponentListener(new ComponentAdapter() {
      public void componentMoved(ComponentEvent e) {
        Point p = demo.getLocation();
        palette.setLocation(new Point(p.x-palette.getWidth()-10,p.y));
      }
    });
    demo.pack();
    demo.setLocationRelativeTo(null);
    demo.setVisible(true);
    palette.setVisible(true);
   
    demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
 
  public ColorPickerDemo() {
    try {
      String lf = UIManager.getSystemLookAndFeelClassName();
      UIManager.setLookAndFeel(lf);
    } catch (Throwable e) {
      e.printStackTrace();
    }
   
    ColorPicker picker = new ColorPicker();
    picker.setOpacityVisible(true);
    Random r = new Random(System.currentTimeMillis());
    picker.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
    getContentPane().add(picker);
    picker.addPropertyChangeListener(this);
   
    /*
    If you really want to know what RGB values the mouse is over:
    ColorPickerPanel pickerPanel = picker.getColorPanel();
    pickerPanel.addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseMoved(MouseEvent e) {
        ColorPickerPanel cpp = (ColorPickerPanel)e.getSource();
        int[] rgb = cpp.getRGB(e.getPoint());
        System.out.println("indicated point: "+rgb[0]+", "+rgb[1]+", "+rgb[2]);
      }
    }); */
   
    picker.setBackground(Color.white);
    picker.setOpaque(true);
  }

  public void propertyChange(PropertyChangeEvent evt) {
    System.out.println("\""+evt.getPropertyName()+"\" "+toString(evt.getOldValue())+"->"+toString(evt.getNewValue()));
  }
 
  /** Because Color.toString() omits alpha information...
   *
   * @param obj
   * @return
   */
  private static String toString(Object obj) {
    if(obj==null)
      return null;
   
    if(obj instanceof Color) {
      Color c = (Color)obj;
      return "Color[ r="+c.getRed()+", g="+c.getGreen()+", b="+c.getBlue()+", a="+c.getAlpha()+"]";
    }
    return obj.toString();
  }
}
TOP

Related Classes of com.bric.swing.ColorPickerDemo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.